<?php


class SvcCRUDConnected extends SvcCommun {
    
    
    
    protected static $bodyCssClass='crud';
    
    
    
    const LISTER=1;
    const EDITER=2;
    
    const ANCHOR_LIST='a_list';
    const ANCHOR_EDIT='a_edit';
    
    private static $classe;
    
    

    
    public static function verifier(){

        if(!Security::isConnected()){
            Security::notAllowedPage();
        }

        $classe=self::getClass();

        if(isset($_GET['action'])){
            if($_GET['action']=='delete'){
                if(Security::isConnected()){
                    self::applyDeleteCRUD($classe);
                }
            }
        }
        if(isset($_POST['action'])){
            if($_POST['action']=='save'){
                if(Security::isConnected()){
                    self::applySaveCRUD($classe);
                }
            }
        }

        self::$title=$classe::getTitre('main');
        self::$classe=$classe;
    }
    
    
	
    private static function getClass(){
        $class=Form::getParam(Admin::$requestParam);
        if($class){
            if(array_key_exists($class,Admin::$listeClasses)){
                Session::setValue('adminClass',$class);
            }
            else{
                Security::notAllowedPage();
            }
        }
        else{
            $class=Session::getValue('adminClass');
        }
        return $class;
    }
    
    
    
    
    private static function redirect($direction){
        switch($direction){
            case self::LISTER: Navig::redirect(Navig::getPageName().'#'.self::ANCHOR_LIST); break;
            case self::EDITER: Navig::redirect(Navig::getPageName().'#'.self::ANCHOR_EDIT); break;
        }
    }
	
	
	
    private static function applyDeleteCRUD($class){
        if(isset($class::$blockDelete)){
            Message::error("Un élément $class ne peut pas être supprimé");
        }
        else{
            //pour supprimer un élément, il faut le trouver en base
            if(isset($_GET['id'])){
                $selected=$class::load($_GET['id']);
                if($selected != null){
                    if($selected->delete()){
                        Message::info('Suppression réalisée avec succès');
                    }
                    else{
                        Message::error("La suppression n'a pas fonctionné");
                    }
                    if(!Properties::getValue('debugOnPage')) self::redirect(self::LISTER);
                }
            }
        }
    }
	
    private static function applySaveCRUD($class){
        $entity=new $class();

        //on vérifie si on est en mode édition
        if(isset($_GET['id'])){
            $selected=$class::load($_GET['id']);
            if($selected != null){
                $isEdit = true;
                $entity = $selected;
            }
        }

        $entity->populate($_POST);
        
        foreach($_FILES as $key=>$file){
            $entity->populateFile($key);
        }

        if($entity->save()){
            Message::info('Enregistrement réalisé avec succès');
            if(!Properties::getValue('debugOnPage')) self::redirect(self::LISTER);
        }
        else{
            Message::error("L'enregistrement n'a pas fonctionné");
        }
    }
    
	
    public static function getCRUDNavigPanel(){
        $class=self::$classe;
        $page=Navig::getPageName();
        $titreList=Texte::toHtml($class::getTitre('list'));

        $navig='<div class="navigation">'.PHP_EOL;
        $navig.="<a href='$page".'#'.self::ANCHOR_LIST."'>$titreList</a>".PHP_EOL;
        if(!isset($class::$blockCreate)){
            $titreCreate=Texte::toHtml($class::getTitre('new'));
            $navig.='<span> - </span>'.PHP_EOL;
            $navig.="<a href='$page".'#'.self::ANCHOR_EDIT."'>$titreCreate</a>".PHP_EOL;
        }
        $navig.='</div>'.PHP_EOL;

        return $navig;
    }
	
	
    public static function getMeta($param='comment'){
        $class=self::$classe;
        return $class::getMeta($param);
    }
	
	
    public static function getListTable(){
        $class=self::$classe;
        return $class::getListTable();
    }
	

    public static function getFormulaire(){
        $class=self::$classe;
        return $class::getFormulaire();
    }
    
    
}


?>